home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / Xconq 7.0d37 / source / kernel / conq.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-02  |  16.1 KB  |  353 lines  |  [TEXT/KAHL]

  1. /* Main include file for Xconq.
  2.    Copyright (C) 1991, 1992, 1993, 1994, 1995 Stanley T. Shebs.
  3.  
  4. Xconq is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2, or (at your option)
  7. any later version.  See the file COPYING.  */
  8.  
  9. /* This is the include file that nearly all Xconq source files
  10.    should include (exceptions would be very low-level or generic
  11.    sources).  While it might be possible to find a source file
  12.    or two that does not all the definitions here, in general a
  13.    source file will need all of these includes. */
  14.  
  15. #include "config.h"
  16. #include "misc.h"
  17. #include "dir.h"
  18. #include "lisp.h"
  19. #include "module.h"
  20. #include "game.h"
  21. #include "player.h"
  22. #include "side.h"
  23. #include "unit.h"
  24. #include "world.h"
  25. #include "history.h"
  26. #include "score.h"
  27. #include "help.h"
  28. #include "ai.h"
  29. #include "version.h"
  30.  
  31. /* (should be in a movies.h?) */
  32.  
  33. enum movie_type {
  34.   movie_null,
  35.   movie_miss,
  36.   movie_hit,
  37.   movie_death,
  38.   movie_nuke,
  39.   movie_extra_0
  40. };
  41.  
  42. typedef struct a_movie_type {
  43.   enum movie_type type;
  44.   char *name;
  45. } MovieType;
  46.  
  47. /* Declarations of globally visible globals. */
  48.  
  49. extern int typesdefined;
  50. extern int gamedefined;
  51. extern int compromised;
  52. extern int cursequence;
  53. extern char *version;
  54. extern char *xconqlib;
  55. extern int beforestart;
  56. extern int endofgame;
  57. extern int any_post_action_scores;
  58. extern int any_people_side_changes;
  59. extern int max_zoc_range;
  60. extern time_t game_start_in_real_time;
  61. extern time_t turn_play_start_in_real_time;
  62.  
  63. /* Declarations of functions that must be supplied by an interface. */
  64.  
  65. extern void announce_read_progress PROTO ((void));
  66. extern void announce_lengthy_process PROTO ((char *msg));
  67. extern void announce_progress PROTO ((int pctdone));
  68. extern void finish_lengthy_process PROTO ((void));
  69.  
  70. extern Player *add_default_player PROTO ((void));
  71.  
  72. extern void init_ui PROTO ((Side *side));
  73.  
  74. extern int active_display PROTO ((Side *side));
  75.  
  76. extern void update_turn_display PROTO ((Side *side, int rightnow));
  77. extern void update_action_display PROTO ((Side *side, int rightnow));
  78. extern void update_action_result_display PROTO ((Side *side, Unit *unit, int rslt, int rightnow));
  79. extern void update_event_display PROTO ((Side *side, HistEvent *hevt, int rightnow));
  80. extern void update_fire_at_display PROTO ((Side *side, Unit *unit, Unit *unit2, int m, int rightnow));
  81. extern void update_fire_into_display PROTO ((Side *side, Unit *unit, int x, int y, int z, int m, int rightnow));
  82. extern void update_clock_display PROTO ((Side *side, int rightnow));
  83. extern void update_side_display PROTO ((Side *side, Side *side2, int rightnow));
  84. extern void update_unit_display PROTO ((Side *side, Unit *unit, int rightnow));
  85. extern void update_unit_acp_display PROTO ((Side *side, Unit *unit, int rightnow));
  86. extern void update_message_display PROTO ((Side *side, Side *side2, char *str, int rightnow));
  87. extern void update_cell_display PROTO ((Side *side, int x, int y, int rightnow));
  88. extern void update_all_progress_displays PROTO ((char *str, int s));
  89. extern void update_everything PROTO ((void));
  90. extern void flush_display_buffers PROTO ((Side *side));
  91.  
  92. extern int schedule_movie PROTO ((Side *side, enum movie_type movie, ...));
  93. extern void play_movies PROTO ((SideMask sidemask));
  94.  
  95. extern void notify PROTO ((Side *side, char *str, ...));
  96.  
  97. extern void init_warning PROTO ((char *str, ...));
  98. extern void low_init_warning PROTO ((char *str));
  99. extern void init_error PROTO ((char *str, ...));
  100. extern void low_init_error PROTO ((char *str));
  101. extern void run_warning PROTO ((char *str, ...));
  102. extern void low_run_warning PROTO ((char *str));
  103. extern void run_error PROTO ((char *str, ...));
  104. extern void low_run_error PROTO ((char *str));
  105.  
  106. extern void printlisp PROTO ((Obj *));
  107.  
  108. extern void close_displays PROTO ((void));
  109.  
  110. /* Declarations of functions. */
  111.  
  112. extern void init_library_path PROTO ((char *path));
  113. extern void init_data_structures PROTO ((void));
  114. extern void check_game_validity PROTO ((void));
  115. extern void calculate_globals PROTO ((void));
  116. extern void patch_object_references PROTO ((void));
  117. extern void make_trial_assignments PROTO ((void));
  118. extern void make_up_a_side PROTO ((void));
  119. extern void init_side_advantage PROTO ((Side *side));
  120. extern int add_side_and_player PROTO ((void));
  121. extern int exchange_players PROTO ((int n, int n2));
  122. extern int remove_side_and_player PROTO ((void));
  123. extern void run_synth_methods PROTO ((void));
  124. extern int make_random_date PROTO ((void));
  125. extern int make_weather PROTO ((void));
  126. extern void final_init PROTO ((void));
  127. extern void configure_sides PROTO ((void));
  128. extern void init_all_views PROTO ((void));
  129. extern void init_area_views PROTO ((void));
  130. extern int make_initial_materials PROTO ((void));
  131. extern void init_supply PROTO ((Unit *unit));
  132. extern int saved_game PROTO ((void));
  133. extern void init_side_balance PROTO ((void));
  134. extern void check_consistency PROTO ((void));
  135. extern void assign_players_to_sides PROTO ((void));
  136. extern char *version_string PROTO ((void));
  137. extern char *copyright_string PROTO ((void));
  138. extern char *license_string PROTO ((void));
  139.  
  140. extern void syntax_error PROTO ((Obj *x, char *msg));
  141. extern void type_error PROTO ((Obj *x, char *msg));
  142. extern void interp_form PROTO ((Module *module, Obj *form));
  143. extern void interp_game_module PROTO ((Obj *form, Module *module));
  144. extern void do_module_variants PROTO ((Module *module, Obj *lis));
  145. extern void fill_in_side PROTO ((Side *side, Obj *props, int userdata));
  146. extern void read_warning PROTO ((char *str, ...));
  147.  
  148. extern int eval_boolean_expression PROTO ((Obj *expr, int (*fn)(Obj *), int dflt));
  149.  
  150. extern void init_actions PROTO ((void));
  151. extern int can_move_via_conn PROTO ((Unit *unit, int nx, int ny));
  152. extern int can_occupy_conn PROTO ((Unit *unit, int nx, int ny, int nz));
  153. extern int move_unit PROTO ((Unit *unit, int nx, int ny));
  154. extern int can_move_at_all PROTO ((Unit *unit));
  155. extern int in_blocking_zoc PROTO ((Unit *unit, int x, int y, int z));
  156. extern int unit_blockable_by PROTO ((Unit *unit, Unit *unit2));
  157. extern int total_move_cost PROTO ((int u, int u2, int x1, int y1, int z1, int x2, int y2, int z2));
  158. extern int zoc_move_cost PROTO ((Unit *unit, int ox, int oy, int oz));
  159. extern int maybe_react_to_move PROTO ((Unit *unit, int ox, int oy));
  160. extern void consume_move_supplies PROTO ((Unit *unit));
  161. extern int sides_allow_entry PROTO ((Unit *unit, Unit *transport));
  162. extern int total_entry_cost PROTO ((int u1, int u3, int x1, int y1, int z1, int u2, int x2, int y2, int z2));
  163. extern int transfer_supply PROTO ((Unit *from, Unit *to, int m, int amount));
  164. extern void adjust_tech_crossover PROTO ((Side *side, int u));
  165. extern void adjust_tooling_crossover PROTO ((Unit *unit, int u2));
  166. extern void garrison_unit PROTO ((Unit *newunit, Unit *unit2));
  167. extern void make_unit_complete PROTO ((Unit *unit));
  168. extern void distribute_material PROTO ((Unit *unit, int m, int amt));
  169. extern int execute_action PROTO ((Unit *unit, Action *action));
  170. extern int can_have_enough_acp PROTO ((Unit *unit, int acp));
  171. extern int has_enough_acp PROTO ((Unit *unit, int acp));
  172. extern int has_supply_to_act PROTO ((Unit *unit));
  173. extern void use_up_acp PROTO ((Unit *unit, int acp));
  174. extern int people_surrender_chance PROTO ((int u, int x, int y));
  175. extern void detonate_on_approach_around PROTO ((Unit *unit));
  176. extern int unit_speed PROTO ((Unit *unit, int nx, int ny));
  177. extern int zoc_range PROTO ((Unit *unit, int u2));
  178. extern int damaged_value PROTO ((Unit *unit, Obj *effect, int maxval));
  179.  
  180. extern int can_research PROTO ((Unit *unit));
  181. extern int type_can_research PROTO ((int u));
  182. extern int can_toolup PROTO ((Unit *unit));
  183. extern int type_can_toolup PROTO ((int u));
  184. extern int can_create PROTO ((Unit *unit));
  185. extern int type_can_create PROTO ((int u));
  186. extern int can_complete PROTO ((Unit *unit));
  187. extern int type_can_complete PROTO ((int u));
  188. extern int can_repair PROTO ((Unit *unit));
  189. extern int type_can_repair PROTO ((int u));
  190. extern int can_change_type PROTO ((Unit *unit));
  191. extern int type_can_change_type PROTO ((int u));
  192. extern int can_disband_at_all PROTO ((Side *side, Unit *unit));
  193. extern int any_construction_possible PROTO ((void));
  194. extern char *action_desig PROTO ((Action *act));
  195.  
  196. extern int can_attack PROTO ((Unit *unit));
  197. extern int type_can_attack PROTO ((int u));
  198. extern int can_fire PROTO ((Unit *unit));
  199. extern int type_can_fire PROTO ((int u));
  200. extern int type_can_capture PROTO ((int u));
  201. extern int can_detonate PROTO ((Unit *unit));
  202.  
  203. extern int one_attack PROTO ((Unit *atker, Unit *defender));
  204. extern int found_blocking_elevation PROTO ((int u, int ux, int uy, int uz, int u2, int u2x, int u2y, int u2z));
  205. extern void fire_on_unit PROTO ((Unit *atker, Unit *other));
  206. extern int enough_ammo PROTO ((Unit *unit, Unit *other));
  207. extern void attack_unit PROTO ((Unit *atker, Unit *other));
  208. extern void maybe_hit_unit PROTO ((Unit *atker, Unit *other, int fallsoff));
  209. extern void hit_unit PROTO ((Unit *unit, int hit, Unit *atker));
  210. extern void reckon_damage PROTO ((void));
  211. extern void reckon_damage_around PROTO ((int x, int y, int r));
  212. extern void damage_unit PROTO ((Unit *unit));
  213. extern int retreat_unit PROTO ((Unit *unit, Unit *atker));
  214. extern int retreat_in_dir PROTO ((Unit *unit, int dir));
  215. extern void attempt_to_capture_unit PROTO ((Unit *atker, Unit *other));
  216. extern int capture_chance PROTO ((int u, int u2, Side *side2));
  217. extern void capture_unit PROTO ((Unit *unit, Unit *pris));
  218. extern void capture_occupant PROTO ((Unit *unit, Unit *pris, Unit *occ));
  219. extern int detonate_unit PROTO ((Unit *unit, int x, int y, int z));
  220.  
  221. extern int multiply_dice PROTO ((int dice, int mult));
  222. extern void damage_terrain PROTO ((int u, int x, int y));
  223.  
  224. extern int run_game PROTO ((int maxactions));
  225. extern void test_for_game_start PROTO ((void));
  226. extern void test_for_game_end PROTO ((void));
  227. extern int damaged_acp PROTO ((Unit *unit, Obj *effect));
  228. extern int all_sides_finished PROTO ((void));
  229. extern void finish_turn PROTO ((Side *side));
  230. extern void check_realtime PROTO ((void));
  231. extern int exceeded_rt_for_game PROTO ((void));
  232. extern int exceeded_rt_per_turn PROTO ((void));
  233. extern void compute_acp PROTO ((Unit *unit));
  234. extern int units_still_acting PROTO ((Side *side));
  235. extern void resign_game PROTO ((Side *side, Side *side2));
  236. extern int realtime_game PROTO ((void));
  237. extern int all_others_willing_to_save PROTO ((Side *side));
  238. extern int all_others_willing_to_quit PROTO ((Side *side));
  239. extern void end_the_game PROTO ((void));
  240. extern void change_people_side_around PROTO ((int x, int y, int u, Side *side));
  241. extern void init_random_events PROTO ((void));
  242. extern void maybe_starve PROTO ((Unit *unit, int partial));
  243. extern int people_surrender_chance PROTO ((int u, int x, int y));
  244. extern void compose_actionvector PROTO ((void));
  245. extern int unit_priority PROTO ((Unit *unit));
  246.  
  247. extern int make_fractal_terrain PROTO ((void));
  248. extern int make_random_terrain PROTO ((void));
  249. extern int make_earthlike_terrain PROTO ((void));
  250. extern int make_maze_terrain PROTO ((void));
  251. extern int name_geographical_features PROTO ((void));
  252. extern void add_edge_terrain PROTO ((void));
  253.  
  254. extern int make_countries PROTO ((void));
  255. extern int make_independent_units PROTO ((void));
  256.  
  257. extern int make_rivers PROTO ((void));
  258.  
  259. extern int make_roads PROTO ((void));
  260.  
  261. extern Obj *make_namer PROTO ((Obj *sym, Obj *meth));
  262.  
  263. extern void init_namers PROTO ((void));
  264. extern void make_up_side_name PROTO ((Side *side));
  265. extern int name_in_use PROTO ((Side *side, char *str));
  266. extern int name_units_randomly PROTO ((void));
  267. extern char *unit_namer PROTO ((Unit *unit));
  268. extern char *propose_unit_name PROTO ((Unit *unit));
  269. extern void make_up_unit_name PROTO ((Unit *unit));
  270. extern void assign_unit_number PROTO ((Unit *unit));
  271. extern char *run_namer PROTO ((Obj *namer));
  272. extern char *name_from_grammar PROTO ((Obj *grammar));
  273. extern void gen_name PROTO ((Obj *nonterm, Obj *rules, int depth, char *rslt));
  274. extern void gen_from_rule PROTO ((Obj *rule, Obj *rules, int depth, char *rslt));
  275.  
  276. extern void pad_out PROTO ((char *buf, int n));
  277. extern char *short_side_title PROTO ((Side *side));
  278. extern char *shortest_side_title PROTO ((Side *side2, char *buf));
  279. extern char *rel_short_side_title PROTO ((Side *side, Side *side2, int n));
  280. extern char *rel_long_side_title PROTO ((Side *side, Side *side2));
  281. extern char *narrative_side_desc PROTO ((Side *side, Side *side2));
  282. extern char *narrative_side_desc_first PROTO ((Side *side, Side *side2));
  283. extern char *long_player_title PROTO ((char *buf, Player *player, char *thisdisplayname));
  284. extern char *short_player_title PROTO ((char *buf, Player *player, char *thisdisplayname));
  285. extern void side_and_type_name PROTO ((char *buf, Side *side, int u, Side *side2));
  286. extern char *unit_handle PROTO ((Side *side, Unit *unit));
  287. extern char *short_unit_handle PROTO ((Unit *unit));
  288. extern void name_or_number PROTO ((Unit *unit, char *buf));
  289. extern void construction_desc PROTO ((char *buf, Unit *unit, int u));
  290. extern void constructible_desc PROTO ((char *buf, Side *side, int u, Unit *unit));
  291. extern int est_completion_time PROTO ((Unit *unit, int u2));
  292. extern void historical_event_date_desc PROTO ((HistEvent *hevt, char *buf));
  293. extern void historical_event_desc PROTO ((Side *side, HistEvent *hevt, char *buf));
  294. extern void linear_desc PROTO ((char *buf, int x, int y));
  295. extern void elevation_desc PROTO ((char *buf, int x, int y));
  296. extern char *feature_desc PROTO ((Feature *feature, char *buf));
  297. extern char *feature_name_at PROTO ((int x, int y));
  298. extern void temperature_desc PROTO ((char *buf, int x, int y));
  299. extern void hp_desc PROTO ((char *buf, Unit *unit, int label));
  300. extern void acp_desc PROTO ((char *buf, Unit *unit, int label));
  301. extern void plan_desc PROTO ((char *buf, Unit *unit));
  302. extern void task_desc PROTO ((char *buf, Task *task));
  303. extern void time_desc PROTO ((char *buf, int time, int maxtime));
  304. extern char *summarize_units PROTO ((char *buf, int *ucnts));
  305. extern char *exit_commentary PROTO ((Side *side));
  306. extern char *ordinal_suffix PROTO ((int n));
  307. extern char *plural_form PROTO ((char *word));
  308. extern char *make_text PROTO ((char *buf, Obj *maker, long a1, long a2, long a3, long a4));
  309. extern char *absolute_date_string PROTO ((long date));
  310. extern char *relative_date_string PROTO ((long date, long base));
  311. extern void parse_usual_initial_date PROTO ((void));
  312. extern void write_unit_record PROTO ((FILE *fp, Side *side));
  313. extern void write_side_results PROTO ((FILE *fp, Side *side));
  314. extern void write_combat_results PROTO ((FILE *fp, Side *side));
  315. extern void dice_desc PROTO ((char *buf, int dice));
  316. extern char *past_unit_handle PROTO ((Side *side, PastUnit *past_unit));
  317. extern char *short_past_unit_handle PROTO ((PastUnit *past_unit));
  318. extern void past_name_or_number PROTO ((PastUnit *past_unit, char *buf));
  319. extern void record_missing_image PROTO ((int typtyp, char *str));
  320. extern int missing_images PROTO ((char *buf));
  321.  
  322. extern void describe_command PROTO ((int ch, char *name, char *help, int onechar, char *buf));
  323.  
  324. extern FILE *open_module_library_file PROTO ((Module *module));
  325. extern FILE *open_module_explicit_file PROTO ((Module *module));
  326. extern FILE *open_library_file PROTO ((char *filename));
  327. extern char *default_library_filename PROTO ((void));
  328. extern char *news_filename PROTO ((void));
  329. extern char *saved_game_filename PROTO ((void));
  330. extern char *checkpoint_filename PROTO ((void));
  331. extern char *error_save_filename PROTO ((void));
  332. extern char *statistics_filename PROTO ((void));
  333. extern void remove_saved_game PROTO ((void));
  334. extern void init_signal_handlers PROTO ((void));
  335. extern int n_seconds_elapsed PROTO ((int n));
  336.  
  337. extern void doublecheck_state PROTO ((Side *side));
  338. extern long extension_value PROTO ((Obj *extensions, char *key, long dflt));
  339. extern void set_u_internal_name PROTO ((int u, char *s));
  340. extern void set_u_type_name PROTO ((int u, char *s));
  341. extern void set_m_type_name PROTO ((int m, char *s));
  342. extern void set_t_type_name PROTO ((int t, char *s));
  343. extern int coerce_to_side_id PROTO ((Obj *x));
  344. extern Side *coerce_to_side PROTO ((Obj *x));
  345. extern int coerce_to_unit_id PROTO ((Obj *x));
  346. extern Unit *coerce_to_unit PROTO ((Obj *x));
  347.  
  348. extern int write_entire_game_state PROTO ((char *fname));
  349. extern int write_game_module PROTO ((Module *module));
  350.  
  351. int total_gain PROTO ((Side *side, int u));
  352. int total_loss PROTO ((Side *side, int u));
  353.